package com.cskaoyan.javase.oop1._7constructor._2this;

/**
 * 在构造器中使用this关键字
 * 和在成员方法中一样,构造器中的this可以用来访问类中的成员变量/方法
 * 可以用来区分同名的成员变量/方法
 *
 * this关键字在构造器中的特殊用途
 * 在一个构造器中,可以使用:
 * this(实参列表);
 * 表示调用本类中的其它构造器
 * 当然具体调用哪个构造器,要看是参列表
 * 注意事项:
 * this关键字在构造器中表示调用同类其它构造器时,一定要处在构造器代码的第一行!!!
 *
 *
 * 一旦创建对象的构造器中存在this调用同类中的构造器
 * 那么:
 * 首先JVM会去调用new对象的构造器
 * 然后JVM会根据this(实参)去调用this构造器
 * 然后执行成员变量的显式赋值
 * 然后执行this构造器
 * 最后执行new对象构造器的代码
 * new对象的构造器执行时,显式赋值不会再次执行
 * new对象构造器执行完毕,创建对象就结束了!
 *
 * @since 10:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Cat c = new Cat("中华田园猫", 1000, "大橘");
    }
}

class Cat {
    String breed = "加菲猫";
    double price = 2000;
    String name = "大黄";

    public Cat() {
    }

    public Cat(String breed, double price) {
        this.breed = breed;
        this.price = price;
    }

    public Cat(String breed, double price, String name) {
        /*this.breed = breed;
        this.price = price;*/
        this(breed, price);
        this.name = name;
        // Call to 'this()' must be first statement in constructor body
        // this(breed, price);
    }
}